<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>dequeue_message [HALCON算子参考手册]</title>
<style type="text/css">
      body {
    color: #000000;
    background-color: #ffffff;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.body_main {
    margin-left: 35px;
    margin-right: 35px;
}

@media screen and (min-width:992px) {

    .body_main {
        margin-left: 10%;
        margin-right: 10%;
    }

    table.toctable {
        width: 80%
    }
}

@media screen and (min-width:1400px) {

    .body_main {
        margin-left: 15%;
        margin-right: 15%;
    }

    table.toctable {
        width: 70%
    }
}

body>div ul ul {
    margin-left: inherit;
}

a:link {
    color: #0044cc;
}

a:link,
a:visited {
    text-decoration: none;
}

a:link:hover,
a:visited:hover {
    text-decoration: underline;
}

th {
    text-align: left;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-rendering: optimizeLegibility;
    color: #666666;
}

code {
    font-family: monospace,monospace;
}

h1 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

h2 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

hr {
    border: 0;
    border-top: solid 1px #f28d26;
}

.pre {
    display: block;
    padding-bottom: 1ex;
    font-family: monospace;
    white-space: pre;
}

pre {
    font-family: monospace, monospace;
    padding: 1ex;
    white-space: pre-wrap;
}

.toc {
    font-size: 80%;
    border-top: 1px dashed #f28d26;
    border-bottom: 1px dashed #f28d26;
    padding-top: 5px;
    padding-bottom: 5px;
}

.inv {
    margin: 0;
    border: 0;
    padding: 0;
}

.banner {
    color: #666666;
    padding-left: 1em;
}

.logo {
    background-color: white;
}

.keyboard {
    font-size: 80%;
    padding-left: 3px;
    padding-right: 3px;
    border-radius: 5px;
    border-width: 1px;
    border-style: solid;
    border-color: #f28d26;
    background-color: #f3f3f3;
}

.warning {
    margin-top: 2ex;
    margin-bottom: 1ex;
    padding: 10px;
    text-align: center;
    border: 1px solid;
    color: #bb0000;
    background-color: #fff7f7
}

.imprint {
    margin-top: 1ex;
    font-size: 80%;
    color: #666666;
}

.imprinthead {
    font-weight: bolder;
    color: #666666;
}

.indexlink {
    text-align: right;
    padding-bottom: 5px;
}

.postscript {
    margin-top: 2ex;
    font-size: 80%;
    color: #666666
}

.evenrow {
    background-color: #e7e7ef;
    vertical-align: top;
}

.oddrow {
    background-color: #f7f7ff;
    vertical-align: top;
}

.headrow {
    background-color: #97979f;
    color: #ffffff;
    vertical-align: top;
}

.logorow {
    vertical-align: top;
}

.error {
    color: red;
}

.var {
    font-style: italic
}

.halconoperator {
    font-family: monospace, monospace;
}

span.operator {
    font-family: monospace, monospace;
}

span.procedure {
    font-family: monospace, monospace;
}

span.operation {
    font-family: monospace, monospace;
}

span.feature {
    font-family: Arial, Helvetica, Homerton, sans-serif;
}

ul {
    padding-left: 1.2em;
}

li.dot {
    list-style-type: square;
    color: #f28d26;
}

.breadcrumb {
    font-size: 80%;
    color: white;
    background-color: #062d64;
    margin-bottom: 20px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 15px;
}

.webbar {
    font-size: 80%;
    background-color: #dddddd;
    margin-top: 0px;
    margin-left: -35px;
    margin-right: -35px;
    margin-bottom: 0px;
    padding-top: 5px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 5px;
}

.footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    border-top: 1px dashed #f28d26;
    font-size: 80%;
    color: #666666;
    padding-bottom: 8px;
}

.footer .socialmedia a {
    padding-left: 7px;
}

.socialmedia {
    padding-top: 10px;
}

.copyright {
    margin-top: 19px;
}

.breadcrumb a {
    color: #ffffff;
    border-bottom: 1px solid white;
}

.breadcrumb a:link:hover,
.breadcrumb a:visited:hover {
    text-decoration: none;
    border-bottom: none;
}

.heading {
    margin-top: 1ex;
    font-size: 110%;
    font-weight: bold;
    color: #666666;
}

.text {
    color: black;
}

.example {
    font-size: 80%;
    background-color: #f3f3f3;
    border: 1px dashed #666666;
    padding: 10px;
}

.displaymath {
    display: block;
    text-align: center;
    margin-top: 1ex;
    margin-bottom: 1ex;
}

.title {
    float: left;
    padding-top: 3px;
    padding-bottom: 3px;
}

.signnote {
    font-family: Arial, Helvetica, Homerton, sans-serif;
    font-size: 80%;
    color: #666666;
    font-weight: lighter;
    font-style: italic
}

.par {
    margin-bottom: 1.5em;
}

.parhead {
    text-align: right;
}

.parname {
    float: left;
}

.pardesc {
    font-size: 85%;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 2em;
}

.parcat {
    color: #666;
    font-weight: bold;
}

*[data-if=cpp],
*[data-if=c],
*[data-if=dotnet],
*[data-if=com],
*[data-if=python] {
    display: none;
}

.tabbar {
    text-align: right;
    border-bottom: 1px solid #f28d26;
    margin-bottom: 0.5em;
}

ul.tabs {
    padding-top: 3px;
    padding-bottom: 3px;
    margin-top: 10px;
    margin-bottom: 0;
    font-size: 80%
}

ul.tabs li {
    padding-top: 3px;
    padding-bottom: 3px;
    display: inline;
    overflow: hidden;
    list-style-type: none;
    margin: 0;
    margin-left: 8px;
    border-top: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
}

ul.tabs li.active {
    border-left: 1px solid #f28d26;
    border-right: 1px solid #f28d26;
    border-top: 1px solid #f28d26;
    border-bottom: 1px solid #fff;
}

ul.tabs li.inactive {
    background-color: #eee;
}

ul.tabs li a {
    padding-left: 5px;
    padding-right: 5px;
    color: #666;
}

ul.tabs li a:link:hover {
    text-decoration: none;
}

ul.tabs li.inactive a {
    color: #666;
}

ul.tabs li.active a {
    color: black;
}

dl.generic dd {
    margin-bottom: 1em;
}

.pari {
    color: olive;
}

.paro {
    color: maroon;
}

.comment {
    font-size: 80%;
    color: green;
    white-space: nowrap;
}

table.grid {
    border-collapse: collapse;
}

table.grid td {
    padding: 5px;
    border: 1px solid;
}

table.layout {
    border: 0px;
}

table.layout td {
    padding: 5px;
}

table.table {
    border-collapse: collapse;
}

table.table td {
    padding: 5px;
    border-left: 0px;
    border-right: 0px;
}

table.table tr:last-child {
    border-bottom: 1px solid;
}

table.table th {
    padding: 5px;
    border-top: 1px solid;
    border-bottom: 1px solid;
    border-left: 0px;
    border-right: 0px;
}

.details_summary {
    cursor: pointer;
}

table.toctable {
    width: 100%;
}

table.toctable col:first-child {
    width: 20%;
}

table.toctable col:nth-last-child(2) {
    width: 8%;
}

table.altcolored tr:nth-child(even) {
    background-color: #f3f3f3;
}

    </style>
<!--OP_REF_STYLE_END-->
<script>
    <!--
var active_lang='hdevelop';function switchVisibility(obj,active_lang,new_lang)
{var display_style='inline';
for(var i=0;i<obj.length;i++)
{if(obj.item(i).getAttribute('data-if')==new_lang)
{obj.item(i).style.display=display_style;}
if(obj.item(i).getAttribute('data-if')==active_lang)
{obj.item(i).style.display='none';}}
return;}
function toggleLanguage(new_lang,initial)
{if(active_lang!=new_lang)
{var lis=document.getElementsByTagName('li');for(var i=0;i<lis.length;i++)
{if(lis.item(i).id=='syn-'+new_lang)
{lis.item(i).className='active';}
else
{lis.item(i).className='inactive';}}
var divs=document.getElementsByTagName('div');var spans=document.getElementsByTagName('span');switchVisibility(divs,active_lang,new_lang);switchVisibility(spans,active_lang,new_lang);if(!initial)
{setCookie("halcon_reference_language",new_lang,null,null);}
active_lang=new_lang;}
return;}
function setCookie(name,value,domain,exp_offset,path,secure)
{localStorage.setItem(name,value);}
function getCookie(name)
{return localStorage.getItem(name);}
function initialize()
{var qs=location.href.split('?')[1];var qs_lang_raw=location.href.split('interface=')[1];var qs_lang;if(qs_lang_raw)
{qs_lang=qs_lang_raw.split('#')[0];}
var cookie_lang=getCookie("halcon_reference_language");var new_lang;if((qs_lang=="hdevelop")||(qs_lang=="dotnet")||(qs_lang=="python")||(qs_lang=="cpp")||(qs_lang=="c"))
{new_lang=qs_lang;setCookie("halcon_reference_language",new_lang,null,null);}
else if((cookie_lang=="hdevelop")||(cookie_lang=="dotnet")||(cookie_lang=="python")||(cookie_lang=="cpp")||(cookie_lang=="c"))
{new_lang=cookie_lang;}
else
{new_lang="hdevelop";}
toggleLanguage(new_lang,1);return;}
-->

  </script>
</head>
<body onload="initialize();">
<div class="breadcrumb">
<br class="inv"><a href="index.html">目录</a> / <a href="toc_system.html">系统</a> / <a href="toc_system_multithreading.html">Multithreading</a><br class="inv">
</div>
<div class="body_main">
<div class="tabbar"><ul class="tabs">
<li id="syn-hdevelop" class="active"><a href="javascript:void(0);" onclick="toggleLanguage('hdevelop')" onfocus="blur()">HDevelop</a></li>
<li id="syn-dotnet" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('dotnet')" onfocus="blur()">.NET</a></li>
<li id="syn-python" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('python')" onfocus="blur()">Python</a></li>
<li id="syn-cpp" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('cpp')" onfocus="blur()">C++</a></li>
<li id="syn-c" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('c')" onfocus="blur()">C</a></li>
</ul></div>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<!--OP_REF_HEADER_END-->
<h1 id="sec_name">
<span data-if="hdevelop" style="display:inline;">dequeue_message</span><span data-if="c" style="display:none;">T_dequeue_message</span><span data-if="cpp" style="display:none;">DequeueMessage</span><span data-if="dotnet" style="display:none;">DequeueMessage</span><span data-if="python" style="display:none;">dequeue_message</span> (算子名称)</h1>
<h2>名称</h2>
<p><code><span data-if="hdevelop" style="display:inline;">dequeue_message</span><span data-if="c" style="display:none;">T_dequeue_message</span><span data-if="cpp" style="display:none;">DequeueMessage</span><span data-if="dotnet" style="display:none;">DequeueMessage</span><span data-if="python" style="display:none;">dequeue_message</span></code> — Receive one or more messages from the message queue.</p>
<h2 id="sec_synopsis">参数签名</h2>
<div data-if="hdevelop" style="display:inline;">
<p>
<code><b>dequeue_message</b>( :  : <a href="#QueueHandle"><i>QueueHandle</i></a>, <a href="#GenParamName"><i>GenParamName</i></a>, <a href="#GenParamValue"><i>GenParamValue</i></a> : <a href="#MessageHandle"><i>MessageHandle</i></a>)</code></p>
</div>
<div data-if="c" style="display:none;">
<p>
<code>Herror <b>T_dequeue_message</b>(const Htuple <a href="#QueueHandle"><i>QueueHandle</i></a>, const Htuple <a href="#GenParamName"><i>GenParamName</i></a>, const Htuple <a href="#GenParamValue"><i>GenParamValue</i></a>, Htuple* <a href="#MessageHandle"><i>MessageHandle</i></a>)</code></p>
</div>
<div data-if="cpp" style="display:none;">
<p>
<code>void <b>DequeueMessage</b>(const HTuple&amp; <a href="#QueueHandle"><i>QueueHandle</i></a>, const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>, HTuple* <a href="#MessageHandle"><i>MessageHandle</i></a>)</code></p>
<p>
<code>HMessageArray <a href="HMessageQueue.html">HMessageQueue</a>::<b>DequeueMessage</b>(const HTuple&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>) const</code></p>
<p>
<code><a href="HMessage.html">HMessage</a> <a href="HMessageQueue.html">HMessageQueue</a>::<b>DequeueMessage</b>(const HString&amp; <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>) const</code></p>
<p>
<code><a href="HMessage.html">HMessage</a> <a href="HMessageQueue.html">HMessageQueue</a>::<b>DequeueMessage</b>(const char* <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>) const</code></p>
<p>
<code><a href="HMessage.html">HMessage</a> <a href="HMessageQueue.html">HMessageQueue</a>::<b>DequeueMessage</b>(const wchar_t* <a href="#GenParamName"><i>GenParamName</i></a>, const HTuple&amp; <a href="#GenParamValue"><i>GenParamValue</i></a>) const  <span class="signnote">
            (
            Windows only)
          </span></code></p>
</div>
<div data-if="com" style="display:none;"></div>
<div data-if="dotnet" style="display:none;">
<p>
<code>static void <a href="HOperatorSet.html">HOperatorSet</a>.<b>DequeueMessage</b>(<a href="HTuple.html">HTuple</a> <a href="#QueueHandle"><i>queueHandle</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#MessageHandle"><i>messageHandle</i></a>)</code></p>
<p>
<code><a href="HMessage.html">HMessage[]</a> <a href="HMessageQueue.html">HMessageQueue</a>.<b>DequeueMessage</b>(<a href="HTuple.html">HTuple</a> <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>)</code></p>
<p>
<code><a href="HMessage.html">HMessage</a> <a href="HMessageQueue.html">HMessageQueue</a>.<b>DequeueMessage</b>(string <a href="#GenParamName"><i>genParamName</i></a>, <a href="HTuple.html">HTuple</a> <a href="#GenParamValue"><i>genParamValue</i></a>)</code></p>
</div>
<div data-if="python" style="display:none;">
<p>
<code>def <b>dequeue_message</b>(<a href="#QueueHandle"><i>queue_handle</i></a>: HHandle, <a href="#GenParamName"><i>gen_param_name</i></a>: MaybeSequence[str], <a href="#GenParamValue"><i>gen_param_value</i></a>: MaybeSequence[Union[int, float, str]]) -&gt; Sequence[HHandle]</code></p>
<p>
<code>def <b>dequeue_message_s</b>(<a href="#QueueHandle"><i>queue_handle</i></a>: HHandle, <a href="#GenParamName"><i>gen_param_name</i></a>: MaybeSequence[str], <a href="#GenParamValue"><i>gen_param_value</i></a>: MaybeSequence[Union[int, float, str]]) -&gt; HHandle</code></p>
</div>
<h2 id="sec_description">描述</h2>
<p><code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code> dequeues a message from the message queue
denoted by the <a href="#QueueHandle"><i><code><span data-if="hdevelop" style="display:inline">QueueHandle</span><span data-if="c" style="display:none">QueueHandle</span><span data-if="cpp" style="display:none">QueueHandle</span><span data-if="com" style="display:none">QueueHandle</span><span data-if="dotnet" style="display:none">queueHandle</span><span data-if="python" style="display:none">queue_handle</span></code></i></a> parameter.
The message must have been enqueued by any thread using
<a href="enqueue_message.html"><code><span data-if="hdevelop" style="display:inline">enqueue_message</span><span data-if="c" style="display:none">enqueue_message</span><span data-if="cpp" style="display:none">EnqueueMessage</span><span data-if="com" style="display:none">EnqueueMessage</span><span data-if="dotnet" style="display:none">EnqueueMessage</span><span data-if="python" style="display:none">enqueue_message</span></code></a>.
</p>
<p>The messages are delivered in FIFO (first-in first-out) order, every message
is delivered only once. If the queue is not empty, <code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code>
immediately delivers the oldest message from the queue. This message
is removed from the queue and a handle to the message is returned
in the <a href="#MessageHandle"><i><code><span data-if="hdevelop" style="display:inline">MessageHandle</span><span data-if="c" style="display:none">MessageHandle</span><span data-if="cpp" style="display:none">MessageHandle</span><span data-if="com" style="display:none">MessageHandle</span><span data-if="dotnet" style="display:none">messageHandle</span><span data-if="python" style="display:none">message_handle</span></code></i></a> output parameter. The message data ownership
is transferred (no copy) from the message queue to the newly created
message handle.
</p>
<p>If the queue is empty, <code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code> blocks until a message
becomes available for delivery (being queued from another thread
using <a href="enqueue_message.html"><code><span data-if="hdevelop" style="display:inline">enqueue_message</span><span data-if="c" style="display:none">enqueue_message</span><span data-if="cpp" style="display:none">EnqueueMessage</span><span data-if="com" style="display:none">EnqueueMessage</span><span data-if="dotnet" style="display:none">EnqueueMessage</span><span data-if="python" style="display:none">enqueue_message</span></code></a>).
</p>
<p>The data stored in the message can be queried using
<a href="get_message_tuple.html"><code><span data-if="hdevelop" style="display:inline">get_message_tuple</span><span data-if="c" style="display:none">get_message_tuple</span><span data-if="cpp" style="display:none">GetMessageTuple</span><span data-if="com" style="display:none">GetMessageTuple</span><span data-if="dotnet" style="display:none">GetMessageTuple</span><span data-if="python" style="display:none">get_message_tuple</span></code></a>, <a href="get_message_obj.html"><code><span data-if="hdevelop" style="display:inline">get_message_obj</span><span data-if="c" style="display:none">get_message_obj</span><span data-if="cpp" style="display:none">GetMessageObj</span><span data-if="com" style="display:none">GetMessageObj</span><span data-if="dotnet" style="display:none">GetMessageObj</span><span data-if="python" style="display:none">get_message_obj</span></code></a>, or
<a href="get_message_param.html"><code><span data-if="hdevelop" style="display:inline">get_message_param</span><span data-if="c" style="display:none">get_message_param</span><span data-if="cpp" style="display:none">GetMessageParam</span><span data-if="com" style="display:none">GetMessageParam</span><span data-if="dotnet" style="display:none">GetMessageParam</span><span data-if="python" style="display:none">get_message_param</span></code></a>.
</p>
<p>The message handles obtained through <code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code> can be
further reused (modified and/or enqueued to another message queue).
</p>
<p>If multiple messages were enqueued using a single <a href="enqueue_message.html"><code><span data-if="hdevelop" style="display:inline">enqueue_message</span><span data-if="c" style="display:none">enqueue_message</span><span data-if="cpp" style="display:none">EnqueueMessage</span><span data-if="com" style="display:none">EnqueueMessage</span><span data-if="dotnet" style="display:none">EnqueueMessage</span><span data-if="python" style="display:none">enqueue_message</span></code></a>
call, all those messages will be also retrieved together through a single
<code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code> call, delivering multiple message handles via
the <a href="#MessageHandle"><i><code><span data-if="hdevelop" style="display:inline">MessageHandle</span><span data-if="c" style="display:none">MessageHandle</span><span data-if="cpp" style="display:none">MessageHandle</span><span data-if="com" style="display:none">MessageHandle</span><span data-if="dotnet" style="display:none">messageHandle</span><span data-if="python" style="display:none">message_handle</span></code></i></a> tuple.
</p>
<p>The queue access is internally fully synchronized, no external locking
is required.
</p>
<p>During application reconfiguration or cleanup, it might be necessary
to wake threads waiting for messages in <code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code>.
This can be achieved using 该算子 <a href="set_message_queue_param.html"><code><span data-if="hdevelop" style="display:inline">set_message_queue_param</span><span data-if="c" style="display:none">set_message_queue_param</span><span data-if="cpp" style="display:none">SetMessageQueueParam</span><span data-if="com" style="display:none">SetMessageQueueParam</span><span data-if="dotnet" style="display:none">SetMessageQueueParam</span><span data-if="python" style="display:none">set_message_queue_param</span></code></a>
with the parameter <i><span data-if="hdevelop" style="display:inline">'abort_dequeuing'</span><span data-if="c" style="display:none">"abort_dequeuing"</span><span data-if="cpp" style="display:none">"abort_dequeuing"</span><span data-if="com" style="display:none">"abort_dequeuing"</span><span data-if="dotnet" style="display:none">"abort_dequeuing"</span><span data-if="python" style="display:none">"abort_dequeuing"</span></i>. In such case the currently
blocked <code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code> calls return immediately with H_ERR_MQCNCL.
</p>
<p>Finally, it is possible to adjust <code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code> behavior
through generic parameters within <a href="#GenParamName"><i><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></i></a> and
<a href="#GenParamValue"><i><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></i></a>. Currently, just a single generic parameter
is supported:
</p>
<dl class="generic">

<dt><b><i><span data-if="hdevelop" style="display:inline">'timeout'</span><span data-if="c" style="display:none">"timeout"</span><span data-if="cpp" style="display:none">"timeout"</span><span data-if="com" style="display:none">"timeout"</span><span data-if="dotnet" style="display:none">"timeout"</span><span data-if="python" style="display:none">"timeout"</span></i>:</b></dt>
<dd><p>

Timeout controlling how long 该算子 will block while waiting for
a message if the queue is empty. When expired, 该算子 returns
with H_ERR_TIMEOUT.
The timeout can be specified as an integer or double value in seconds
or as the string <i><span data-if="hdevelop" style="display:inline">'infinite'</span><span data-if="c" style="display:none">"infinite"</span><span data-if="cpp" style="display:none">"infinite"</span><span data-if="com" style="display:none">"infinite"</span><span data-if="dotnet" style="display:none">"infinite"</span><span data-if="python" style="display:none">"infinite"</span></i>. When no timeout is specified,
infinite timeout is used as default, meaning that 该算子 would
block until a new message is enqueued or until the operation is aborted.
</p></dd>
</dl>
<h2 id="sec_execution">运行信息</h2>
<ul>
  <li>Multithreading type: independent (runs in parallel even with exclusive operators).</li>
<li>多线程作用域:全局(可以从任何线程调用)。</li>
  <li>未经并行化处理。</li>
</ul>
<p>This operator returns a handle. Note that the state of an instance of this handle type may be changed by specific operators even though the handle is used as an input parameter by those operators.</p>
<h2 id="sec_parameters">参数表</h2>
  <div class="par">
<div class="parhead">
<span id="QueueHandle" class="parname"><b><code><span data-if="hdevelop" style="display:inline">QueueHandle</span><span data-if="c" style="display:none">QueueHandle</span><span data-if="cpp" style="display:none">QueueHandle</span><span data-if="com" style="display:none">QueueHandle</span><span data-if="dotnet" style="display:none">queueHandle</span><span data-if="python" style="display:none">queue_handle</span></code></b> (input_control)  </span><span>message_queue <code>→</code> <span data-if="dotnet" style="display:none"><a href="HMessageQueue.html">HMessageQueue</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">HHandle</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (handle)</span><span data-if="dotnet" style="display:none"> (<i>IntPtr</i>)</span><span data-if="cpp" style="display:none"> (<i>HHandle</i>)</span><span data-if="c" style="display:none"> (<i>handle</i>)</span></span>
</div>
<p class="pardesc">Message queue handle.</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>QueueHandle == 1</p>
<p class="pardesc"><span class="parcat">Restriction:
      </span><code>QueueHandle != 0</code></p>
</div>
  <div class="par">
<div class="parhead">
<span id="GenParamName" class="parname"><b><code><span data-if="hdevelop" style="display:inline">GenParamName</span><span data-if="c" style="display:none">GenParamName</span><span data-if="cpp" style="display:none">GenParamName</span><span data-if="com" style="display:none">GenParamName</span><span data-if="dotnet" style="display:none">genParamName</span><span data-if="python" style="display:none">gen_param_name</span></code></b> (input_control)  </span><span>string(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">MaybeSequence[str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Names of optional generic parameters</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>GenParamName == GenParamValue</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'timeout'</span>
    <span data-if="c" style="display:none">"timeout"</span>
    <span data-if="cpp" style="display:none">"timeout"</span>
    <span data-if="com" style="display:none">"timeout"</span>
    <span data-if="dotnet" style="display:none">"timeout"</span>
    <span data-if="python" style="display:none">"timeout"</span>
</p>
<p class="pardesc"><span class="parcat">List of values:
      </span><span data-if="hdevelop" style="display:inline">'timeout'</span><span data-if="c" style="display:none">"timeout"</span><span data-if="cpp" style="display:none">"timeout"</span><span data-if="com" style="display:none">"timeout"</span><span data-if="dotnet" style="display:none">"timeout"</span><span data-if="python" style="display:none">"timeout"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="GenParamValue" class="parname"><b><code><span data-if="hdevelop" style="display:inline">GenParamValue</span><span data-if="c" style="display:none">GenParamValue</span><span data-if="cpp" style="display:none">GenParamValue</span><span data-if="com" style="display:none">GenParamValue</span><span data-if="dotnet" style="display:none">genParamValue</span><span data-if="python" style="display:none">gen_param_value</span></code></b> (input_control)  </span><span>tuple(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">MaybeSequence[Union[int, float, str]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string / </span><span data-if="hdevelop" style="display:inline">integer / </span><span data-if="hdevelop" style="display:inline">real)</span><span data-if="dotnet" style="display:none"> (<i>string</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long / </span><span data-if="dotnet" style="display:none">double)</span><span data-if="cpp" style="display:none"> (<i>HString</i> / </span><span data-if="cpp" style="display:none">Hlong / </span><span data-if="cpp" style="display:none">double)</span><span data-if="c" style="display:none"> (<i>char*</i> / </span><span data-if="c" style="display:none">Hlong / </span><span data-if="c" style="display:none">double)</span></span>
</div>
<p class="pardesc">Values of optional generic parameters</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>GenParamName == GenParamValue</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'infinite'</span>
    <span data-if="c" style="display:none">"infinite"</span>
    <span data-if="cpp" style="display:none">"infinite"</span>
    <span data-if="com" style="display:none">"infinite"</span>
    <span data-if="dotnet" style="display:none">"infinite"</span>
    <span data-if="python" style="display:none">"infinite"</span>
</p>
<p class="pardesc"><span class="parcat">List of values:
      </span><span data-if="hdevelop" style="display:inline">'infinite'</span><span data-if="c" style="display:none">"infinite"</span><span data-if="cpp" style="display:none">"infinite"</span><span data-if="com" style="display:none">"infinite"</span><span data-if="dotnet" style="display:none">"infinite"</span><span data-if="python" style="display:none">"infinite"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="MessageHandle" class="parname"><b><code><span data-if="hdevelop" style="display:inline">MessageHandle</span><span data-if="c" style="display:none">MessageHandle</span><span data-if="cpp" style="display:none">MessageHandle</span><span data-if="com" style="display:none">MessageHandle</span><span data-if="dotnet" style="display:none">messageHandle</span><span data-if="python" style="display:none">message_handle</span></code></b> (output_control)  </span><span>message(-array) <code>→</code> <span data-if="dotnet" style="display:none"><a href="HMessage.html">HMessage</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[HHandle]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (handle)</span><span data-if="dotnet" style="display:none"> (<i>IntPtr</i>)</span><span data-if="cpp" style="display:none"> (<i>HHandle</i>)</span><span data-if="c" style="display:none"> (<i>handle</i>)</span></span>
</div>
<p class="pardesc">Handle(s) of the dequeued message(s).</p>
<p class="pardesc"><span class="parcat">Number of elements:
      </span>MessageHandle > 0</p>
<p class="pardesc"><span class="parcat">Assertion:
      </span><code>MessageHandle != 0</code></p>
</div>
<h2 id="sec_example_all">例程 (HDevelop)</h2>
<pre class="example">
create_message_queue (Queue)
* ...
dequeue_message (Queue, [], [], Message)
get_message_obj (Image, Message, 'my_image')
</pre>
<h2 id="sec_result">结果</h2>
<p>If the operation succeeds, <code><span data-if="hdevelop" style="display:inline">dequeue_message</span><span data-if="c" style="display:none">dequeue_message</span><span data-if="cpp" style="display:none">DequeueMessage</span><span data-if="com" style="display:none">DequeueMessage</span><span data-if="dotnet" style="display:none">DequeueMessage</span><span data-if="python" style="display:none">dequeue_message</span></code> returns <TT>2</TT> (
      <TT>H_MSG_TRUE</TT>)
    .
Otherwise an exception is raised. Possible error conditions include
invalid parameters, message dequeue wait timeout (H_ERR_TIMEOUT)
or message dequeue wait abortion (H_ERR_MQCNCL).
Note that in some rare cases, when an error occurs when finishing the
operator call (after the message has already been removed from the queue),
该算子 will attempt to put the message back at the head of the queue
to not lose it.
This might lead to a different message delivery order
if another thread removed another message from the queue in the meanwhile.</p>
<h2 id="sec_successors">可能的后置算子</h2>
<p>
<code><a href="get_message_tuple.html"><span data-if="hdevelop" style="display:inline">get_message_tuple</span><span data-if="c" style="display:none">get_message_tuple</span><span data-if="cpp" style="display:none">GetMessageTuple</span><span data-if="com" style="display:none">GetMessageTuple</span><span data-if="dotnet" style="display:none">GetMessageTuple</span><span data-if="python" style="display:none">get_message_tuple</span></a></code>, 
<code><a href="get_message_obj.html"><span data-if="hdevelop" style="display:inline">get_message_obj</span><span data-if="c" style="display:none">get_message_obj</span><span data-if="cpp" style="display:none">GetMessageObj</span><span data-if="com" style="display:none">GetMessageObj</span><span data-if="dotnet" style="display:none">GetMessageObj</span><span data-if="python" style="display:none">get_message_obj</span></a></code>, 
<code><a href="get_message_param.html"><span data-if="hdevelop" style="display:inline">get_message_param</span><span data-if="c" style="display:none">get_message_param</span><span data-if="cpp" style="display:none">GetMessageParam</span><span data-if="com" style="display:none">GetMessageParam</span><span data-if="dotnet" style="display:none">GetMessageParam</span><span data-if="python" style="display:none">get_message_param</span></a></code>
</p>
<h2 id="sec_see">参考其它</h2>
<p>
<code><a href="create_message_queue.html"><span data-if="hdevelop" style="display:inline">create_message_queue</span><span data-if="c" style="display:none">create_message_queue</span><span data-if="cpp" style="display:none">CreateMessageQueue</span><span data-if="com" style="display:none">CreateMessageQueue</span><span data-if="dotnet" style="display:none">CreateMessageQueue</span><span data-if="python" style="display:none">create_message_queue</span></a></code>, 
<code><a href="clear_message_queue.html"><span data-if="hdevelop" style="display:inline">clear_message_queue</span><span data-if="c" style="display:none">clear_message_queue</span><span data-if="cpp" style="display:none">ClearMessageQueue</span><span data-if="com" style="display:none">ClearMessageQueue</span><span data-if="dotnet" style="display:none">ClearMessageQueue</span><span data-if="python" style="display:none">clear_message_queue</span></a></code>, 
<code><a href="enqueue_message.html"><span data-if="hdevelop" style="display:inline">enqueue_message</span><span data-if="c" style="display:none">enqueue_message</span><span data-if="cpp" style="display:none">EnqueueMessage</span><span data-if="com" style="display:none">EnqueueMessage</span><span data-if="dotnet" style="display:none">EnqueueMessage</span><span data-if="python" style="display:none">enqueue_message</span></a></code>, 
<code><a href="set_message_queue_param.html"><span data-if="hdevelop" style="display:inline">set_message_queue_param</span><span data-if="c" style="display:none">set_message_queue_param</span><span data-if="cpp" style="display:none">SetMessageQueueParam</span><span data-if="com" style="display:none">SetMessageQueueParam</span><span data-if="dotnet" style="display:none">SetMessageQueueParam</span><span data-if="python" style="display:none">set_message_queue_param</span></a></code>, 
<code><a href="get_message_queue_param.html"><span data-if="hdevelop" style="display:inline">get_message_queue_param</span><span data-if="c" style="display:none">get_message_queue_param</span><span data-if="cpp" style="display:none">GetMessageQueueParam</span><span data-if="com" style="display:none">GetMessageQueueParam</span><span data-if="dotnet" style="display:none">GetMessageQueueParam</span><span data-if="python" style="display:none">get_message_queue_param</span></a></code>, 
<code><a href="create_message.html"><span data-if="hdevelop" style="display:inline">create_message</span><span data-if="c" style="display:none">create_message</span><span data-if="cpp" style="display:none">CreateMessage</span><span data-if="com" style="display:none">CreateMessage</span><span data-if="dotnet" style="display:none">CreateMessage</span><span data-if="python" style="display:none">create_message</span></a></code>, 
<code><a href="clear_message.html"><span data-if="hdevelop" style="display:inline">clear_message</span><span data-if="c" style="display:none">clear_message</span><span data-if="cpp" style="display:none">ClearMessage</span><span data-if="com" style="display:none">ClearMessage</span><span data-if="dotnet" style="display:none">ClearMessage</span><span data-if="python" style="display:none">clear_message</span></a></code>, 
<code><a href="set_message_tuple.html"><span data-if="hdevelop" style="display:inline">set_message_tuple</span><span data-if="c" style="display:none">set_message_tuple</span><span data-if="cpp" style="display:none">SetMessageTuple</span><span data-if="com" style="display:none">SetMessageTuple</span><span data-if="dotnet" style="display:none">SetMessageTuple</span><span data-if="python" style="display:none">set_message_tuple</span></a></code>, 
<code><a href="get_message_tuple.html"><span data-if="hdevelop" style="display:inline">get_message_tuple</span><span data-if="c" style="display:none">get_message_tuple</span><span data-if="cpp" style="display:none">GetMessageTuple</span><span data-if="com" style="display:none">GetMessageTuple</span><span data-if="dotnet" style="display:none">GetMessageTuple</span><span data-if="python" style="display:none">get_message_tuple</span></a></code>, 
<code><a href="set_message_obj.html"><span data-if="hdevelop" style="display:inline">set_message_obj</span><span data-if="c" style="display:none">set_message_obj</span><span data-if="cpp" style="display:none">SetMessageObj</span><span data-if="com" style="display:none">SetMessageObj</span><span data-if="dotnet" style="display:none">SetMessageObj</span><span data-if="python" style="display:none">set_message_obj</span></a></code>, 
<code><a href="get_message_obj.html"><span data-if="hdevelop" style="display:inline">get_message_obj</span><span data-if="c" style="display:none">get_message_obj</span><span data-if="cpp" style="display:none">GetMessageObj</span><span data-if="com" style="display:none">GetMessageObj</span><span data-if="dotnet" style="display:none">GetMessageObj</span><span data-if="python" style="display:none">get_message_obj</span></a></code>
</p>
<h2 id="sec_module">模块</h2>
<p>
Foundation</p>
<!--OP_REF_FOOTER_START-->
<hr>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<div class="footer">
<div class="copyright">HALCON算子参考手册 Copyright © 2015-2023 51Halcon</div>
</div>
</div>
</body>
</html>
